Handler এবং Looper এর মাধ্যমে Threads পরিচালনা

Mobile App Development - অ্যান্ড্রয়েড ডেভেলপমেন্ট (Android) - Multithreading এবং Background Tasks
258

Android অ্যাপ্লিকেশনে Handler এবং Looper এর মাধ্যমে Threads পরিচালনা করা হয়। এগুলো Android এর Message Queue এবং Message Loop মেকানিজম ব্যবহার করে ব্যাকগ্রাউন্ড থ্রেডের কাজগুলি ম্যানেজ করতে সহায়ক। Handler এবং Looper একসাথে ব্যবহার করে আপনি মেইন থ্রেডের সাথে যোগাযোগ রাখতে এবং ব্যাকগ্রাউন্ড থ্রেডে বিভিন্ন টাস্ক এক্সিকিউট করতে পারেন। 

Handler এবং Looper এর মাধ্যমে Threads পরিচালনা

নিচে Handler এবং Looper নিয়ে বিস্তারিত আলোচনা এবং উদাহরণ দেওয়া হলো:


১. Looper কী?

Looper হল Android এর একটি ক্লাস, যা একটি থ্রেডের জন্য Message Loop বা Event Loop তৈরি করে। Looper একটি নির্দিষ্ট থ্রেডে একটি মেসেজ কিউ তৈরি করে এবং এটি সেই থ্রেডে মেসেজ বা রানেবল অবজেক্ট প্রসেস করতে দেয়। প্রতিটি Android অ্যাপ্লিকেশনের Main Thread (UI Thread) এর সাথে ডিফল্টভাবে একটি Looper থাকে।

Looper এর বৈশিষ্ট্য:

  • Looper একটি থ্রেডে মেসেজ কিউ তৈরি করে।
  • এটি একটি loop() মেথড ব্যবহার করে থ্রেডে একটি infinite loop চালায়, যা মেসেজ প্রসেস করে।
  • একটি quit() মেথড ব্যবহার করে Looper বন্ধ করা যায়।

২. Handler কী?

Handler হল একটি ক্লাস, যা Looper এর মাধ্যমে মেসেজ পাঠানো এবং রিসিভ করার জন্য ব্যবহার করা হয়। Handler সাধারণত থ্রেডের সাথে যুক্ত থাকে এবং সেই থ্রেডে মেসেজ পাঠানোর মাধ্যমে কাজ পরিচালনা করে।

Handler এর বৈশিষ্ট্য:

  • Handler এর মাধ্যমে একটি নির্দিষ্ট থ্রেডে মেসেজ বা রানেবল পাঠানো যায়।
  • এটি post(), postDelayed(), sendMessage() মেথড ব্যবহার করে কাজগুলি থ্রেডের মেসেজ কিউতে যোগ করে।
  • Handler মেসেজ রিসিভ করার পর handleMessage() মেথড ব্যবহার করে সেই মেসেজ প্রসেস করে।

৩. Handler এবং Looper এর মাধ্যমে Thread তৈরি এবং পরিচালনা করা

Handler এবং Looper ব্যবহার করে একটি কাস্টম থ্রেড তৈরি করা এবং সেটি পরিচালনা করা সহজ। নিচে এর উদাহরণ দেখানো হলো:

উদাহরণ: কাস্টম থ্রেডে Looper এবং Handler ব্যবহার

Step 1: একটি কাস্টম থ্রেড তৈরি করা

class MyCustomThread extends Thread {
    public Handler handler;

    @Override
    public void run() {
        // Looper প্রস্তুত করা
        Looper.prepare();

        // Handler তৈরি করা, যা এই থ্রেডের সাথে কাজ করবে
        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                // মেসেজ প্রসেস করা
                Log.d("HandlerMessage", "Received message: " + msg.what);
            }
        };

        // Looper শুরু করা
        Looper.loop();
    }
}

এখানে MyCustomThread ক্লাসে একটি Handler এবং Looper সেটআপ করা হয়েছে। Looper.prepare() মেথড Looper সেটআপ করে এবং Looper.loop() মেথড মেসেজ কিউ চালু করে। Handler এর handleMessage() মেথড মেসেজ প্রসেস করার জন্য ব্যবহার করা হয়েছে।

Step 2: থ্রেড শুরু করা এবং মেসেজ পাঠানো

MyCustomThread customThread = new MyCustomThread();
customThread.start();

// থ্রেড শুরু হওয়ার পর কিছু সময়ের জন্য অপেক্ষা করা, যাতে Looper প্রস্তুত হয়
new Handler(Looper.getMainLooper()).postDelayed(() -> {
    if (customThread.handler != null) {
        Message message = Message.obtain();
        message.what = 1;
        customThread.handler.sendMessage(message);
    }
}, 1000);

উপরের কোডে একটি MyCustomThread ইন্সট্যান্স তৈরি করা হয়েছে এবং start() মেথড ব্যবহার করে থ্রেড শুরু করা হয়েছে। মেইন থ্রেড থেকে ১ সেকেন্ড পর একটি মেসেজ কাস্টম থ্রেডের Handler এর মাধ্যমে পাঠানো হয়েছে।


৪. Main Thread (UI Thread) এর সাথে Handler ব্যবহার

Android অ্যাপ্লিকেশনে Main Thread বা UI Thread-এ কাজ করার জন্য Handler একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। ব্যাকগ্রাউন্ড থ্রেড থেকে UI Thread-এ কাজ করতে Handler ব্যবহার করা হয়।

উদাহরণ: UI Thread এ ব্যাকগ্রাউন্ড থ্রেড থেকে কাজ করা

Handler mainHandler = new Handler(Looper.getMainLooper());

Thread backgroundThread = new Thread(() -> {
    try {
        // কিছু ব্যাকগ্রাউন্ড টাস্ক
        Thread.sleep(2000);
        
        // মেইন থ্রেডে কাজ পাঠানো
        mainHandler.post(() -> {
            // UI উপাদান আপডেট করা
            Log.d("UIUpdate", "UI Updated from background thread");
        });
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

backgroundThread.start();

এখানে mainHandler ব্যবহার করে UI Thread-এ ব্যাকগ্রাউন্ড থ্রেড থেকে কাজ পাঠানো হয়েছে। post() মেথডের মাধ্যমে Runnable UI Thread এ যোগ করা হয়েছে, যাতে UI উপাদান আপডেট করা যায়।


৫. HandlerThread: Handler এবং Looper এর সহজ ইমপ্লিমেন্টেশন

Android এ HandlerThread একটি বিশেষ থ্রেড, যা Looper এবং Handler ইন্টারনালি সেটআপ করে। এটি ব্যবহার করে একটি ব্যাকগ্রাউন্ড থ্রেডে কাজ সহজেই পরিচালনা করা যায়।

উদাহরণ: HandlerThread ব্যবহার

HandlerThread handlerThread = new HandlerThread("MyHandlerThread");
handlerThread.start();

// Handler তৈরি করা, যা HandlerThread এর সাথে কাজ করবে
Handler backgroundHandler = new Handler(handlerThread.getLooper());

backgroundHandler.post(() -> {
    // ব্যাকগ্রাউন্ড কাজ করা
    Log.d("HandlerThread", "Running task in background thread");
});

HandlerThread ইন্সট্যান্স তৈরি করে, ব্যাকগ্রাউন্ড থ্রেডে Runnable পোস্ট করা হয়েছে। এটি Handler এবং Looper ম্যানুয়ালি সেটআপ করার চেয়ে সহজ এবং কার্যকর।


৬. Looper এর Lifecycle এবং থ্রেড বন্ধ করা

Looper চলমান রাখার জন্য একটি থ্রেড ইনফাইনিট লুপে কাজ করে। যখন থ্রেড বন্ধ করতে হবে, তখন Looper.quit() বা Looper.quitSafely() ব্যবহার করা হয়।

উদাহরণ: Looper বন্ধ করা

if (handlerThread != null) {
    handlerThread.quitSafely();
}

এখানে quitSafely() ব্যবহার করে Looper কে বন্ধ করা হয়েছে। এটি মেসেজ কিউতে থাকা বর্তমান কাজগুলো সম্পন্ন করে তারপর Looper বন্ধ করে।


৭. Handler এবং Looper এর ব্যবহারিক প্রয়োগ

Handler এবং Looper ব্যবহার করে আপনি বিভিন্ন ধরনের কাজ করতে পারেন, যেমন:

  • Background Task Management: ব্যাকগ্রাউন্ডে কাজ পরিচালনা করা।
  • UI Updates: ব্যাকগ্রাউন্ড থেকে মেইন থ্রেডে UI আপডেট পাঠানো।
  • Scheduled Tasks: নির্দিষ্ট সময় পর পর কাজ এক্সিকিউট করা।

উপসংহার

Handler এবং Looper Android এ থ্রেড ম্যানেজমেন্টের একটি গুরুত্বপূর্ণ অংশ, যা ব্যাকগ্রাউন্ড এবং UI থ্রেডের মধ্যে যোগাযোগ সহজ করে। Handler ব্যবহার করে মেসেজ এবং রানেবল প্রসেস করা যায়, এবং Looper থ্রেডে মেসেজ কিউ তৈরি করে। এই মেকানিজমের মাধ্যমে আপনি Android অ্যাপ্লিকেশনগুলিতে ব্যাকগ্রাউন্ড টাস্ক পরিচালনা এবং UI আপডেট করতে সক্ষম হবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...